package com.miku.common;

import java.io.Serializable;

import com.alibaba.fastjson.JSON;

/**
 * 页面控制器
 * @author 杜金伟 [2016年2月29日 上午9:01:34]
 */
public class PageControl implements Serializable {
	private static final long serialVersionUID = 55691994871888980L;
	private int firstResults;
	private int maxResults;
	private String keyword;			//当前查询的关键字
	private int pageBegin;				//开始页号，1开始起算
	private int pageEnd;				//结束页号，1开始起算，比如1-10，这里是10
	private int pageCurrent;			//当前页号，1开始起算
	private int pageCount;			//页总数，多少页
	private int resultRows;			//记录总行数
	private int pageShowRows;	//一页显示的记录数
	private int showPages;			//需要显示的页数
	
	public PageControl(int showRows, String keyword, int rows, int showPages){
		this.pageShowRows = showRows;
		this.resultRows = rows;
		this.keyword = keyword;
		this.pageCurrent = 1;
		this.showPages = showPages;
		calc();
	}
	
	/*@Test
	public void test(){
		PageControl p = new PageControl();
		p.reset("", 110, 10);
		p.to(11);
		p.next();
		p.next();
		p.prev();
		p.prev();
		p.prev();
		p.prev();
		System.out.println("begin = " + p.getPageBegin());
		System.out.println("end = " + p.getPageEnd());
		System.out.println("pageCount = " + p.getPageCount());
		System.out.println("pageCurrent = " + p.getPageCurrent());
	}*/
	
	private void calc(){
		pageCount = resultRows / pageShowRows + (resultRows % pageShowRows == 0 ? 0 : 1);
		pageBegin = (pageCurrent - ((pageCurrent - 1) % showPages));
		pageEnd = Math.min(pageBegin + showPages - 1, pageCount);
		firstResults = (pageCurrent - 1) * pageShowRows;
		maxResults = Math.min(resultRows - firstResults, pageShowRows);//pageShowRows;
	}
	
	/**
	 * 到某一页
	 * @param page
	 */
	public void to(int page){
		if(page > pageCount) page = pageCount;
		if(page < 1) page = 1;
		pageCurrent = page;
		calc();
	}
	
	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	/**
	 * 到下一页
	 * @return
	 */
	public void next(){
		pageCurrent++;
		if(pageCurrent > pageCount)
			pageCurrent = pageCount;
		
		calc();
	}
	
	/**
	 * 到上一页
	 * @return
	 */
	public void prev(){
		pageCurrent--;
		if(pageCurrent < 1)
			pageCurrent = 1;
		
		calc();
	}
	
	/**
	 * 获取前一页的页号，这是要一次翻10页的节奏呢
	 * 假设当前第5页，点击这个，返回0，如果当前15页，返回的将会是10
	 * 意思是让人一次翻页10页
	 * @return
	 */
	public int getPrevPage(){
		return pageBegin - 1 < 1 ? 0 : pageBegin - 1;
	}
	
	/**
	 * 与上边相反，如果当前第5页，返回11，如果最大页数是9页，返回0
	 * 意味着这个按钮可以消失掉了
	 * @return
	 */
	public int getNextPage(){
		return pageEnd + 1 > pageCount ? 0 : pageEnd + 1;
	}

	public int getFirstResults() {
		return firstResults;
	}

	public int getMaxResults() {
		return maxResults;
	}

	public int getPageBegin() {
		return pageBegin;
	}

	public int getPageEnd() {
		return pageEnd;
	}

	public int getPageCurrent() {
		return pageCurrent;
	}

	public int getPageCount() {
		return pageCount;
	}

	public int getResultRows() {
		return resultRows;
	}

	public int getPageShowRows() {
		return pageShowRows;
	}
	
	@Override
	public String toString() {
		return JSON.toJSONString(this);
	}
}